package com.example.util;

/**
 *
 * 模块化 ~~~
 * JPMS（Java Platform Module System）是Java 9发行版的核心亮点。
 *
 * 描述：
 * JDK 9 附带了大约 92 个模块（在 GA 版本中可以进行更改）。
 * Java 9 Module System有一个"java.base"模块。
 * 它被称为基本模块。它是一个独立的模块，不依赖于任何其他模块。默认情况下，所有其他模块都依赖于"java.base"。
 * 个各模块通常只是一个 jar 文件，在根目录下有一个文件module-info.class。
 * 要使用模块，请将 jar 文件包含到modulepath而不是classpath. 添加到类路径的模块化 jar 文件是普通的 jar 文件，
 * module-info.class文件将被忽略。
 *
 * @author DuanXT
 * @date 2022/12/12 15:33
 */
public class M1Util {


    /**
     *
     * 优点：
     * 显式管理依赖：
     * 每个模块需要显式声明自己需暴露的包，而自己所依赖的和自己内部使用的包，则不会暴露，也不会被外部引用到。
     * 这种机制彻底的杜绝了Java9以前Jar包依赖买一送一堆的场景，大大的减少Jar包冲突的情况。
     *
     * 强封装性：
     * 模块显式的选择向其他模块只暴露需要的类或接口，而完美的隐藏了内部实现的细节及其他内部成员，实现了真正的封装。
     *
     * 安全性：
     * 显式依赖管理及强封装性，大大的减少了程序运行时不必要模块的加载，减少了Java运行期间的被攻击面。
     * 代码真正意义上可以按照作者的设计思路进行公开和隐藏，限制了反射的滥用，更好的保护了那些不建议被外部直接使用或过时的内部类。
     *
     * 规范性：
     * 显示的声明暴露的内容，可以让第三方库的开发者更好的管理自己的内部实现逻辑和内部类。
     * 第三方库作者可以更轻松的管理自己的内部类的访问权限和反射调用权限，避免了出现sun.misc.BASE64Encoder这些内部类在已经被官方声明了过时和不建议使用的前提下，仍有大量的开发者去随意使用的情况。因为在Java9之前，JDK开发者只能建议，而无法实现强制约束。
     *
     * 自定义最小运行时映像：
     * Java因为其向后兼容的原则，不会轻易对其内容进行删除，包含的陈旧过时的技术也越来越多，导致JDK变得越来越臃肿。
     * 而Java9的显示依赖管理使得加载最小所需模块成为了可能，我们可以选择只加载必须的JDK模块，
     * 抛弃如java.awt, javax.swing, java.applet等这些用不到的模块。这种机制，大大的减少了运行Java环境所需要的内存资源，
     * 在对于嵌入式系统开发或其他硬件资源受限的场景下的开发非常有用。
     *
     *
     * 其实看了这么多jdk的发展过程 jdk的开发者基本分为两派  一派主张简化java语法的臃肿  一派加强语法的安全
     *
     */
}
